#ifndef MOVEIMPL_H
#define MOVEIMPL_H

#include <cell.h>

class MoveImpl
{
private:
    MoveImpl(Cell* first, Cell* second);
    MoveImpl();
    std::list<MoveImpl*> *m_nextMoves;
    MoveImpl *previousMove = nullptr;
    Cell* m_first = nullptr;
    Cell* m_second = nullptr;
public:
    bool hasNext();
    MoveImpl *addMove(Cell* start, Cell *stop);
    std::list<MoveImpl*> *getNextMoves();
    MoveImpl *getPreviousMove(); // Может возвращать nullptr на первом ходе
    Cell* getFirst();
    Cell* getSecond();
    bool isZeroMove();
    void print();
    static MoveImpl* ZERO_MOVE();
};

#endif // MOVEIMPL_H
